package pers.xiaojun.boot.module.system.service.permission;

import pers.xiaojun.boot.module.system.controller.auth.vo.AuthPermissionInfoRespVO;
import pers.xiaojun.boot.module.system.controller.permission.vo.permission.AssignRoleMenuReqVO;
import pers.xiaojun.boot.module.system.controller.permission.vo.permission.AssignUserRoleReqVO;
import pers.xiaojun.boot.module.system.dao.entity.permission.RoleDO;

import java.util.List;

/**
 * 权限服务类
 *
 * @author xiaojun
 * @since 2025-10-10
 */
public interface PermissionService {

    /**
     * 根据Id判断用户是否拥有权限
     *
     * @param userId      用户id
     * @param permissions 权限列表
     * @return 是否引用
     */
    boolean hasAnyPermissions(Long userId, String... permissions);

    /**
     * 根据Id判断用户是否拥有角色
     *
     * @param userId 用户id
     * @param roles  角色列表
     * @return 是否拥有
     */
    boolean hasAnyRoles(Long userId, String... roles);

    /**
     * 赋予用户角色
     *
     * @param assignRoleVO 更新信息
     */
    void assignUserRole(AssignUserRoleReqVO assignRoleVO);

    /**
     * 赋予角色菜单
     *
     * @param assignMenuVO 更新信息
     */
    void assignRoleMenu(AssignRoleMenuReqVO assignMenuVO);

    /**
     * 获取用户权限信息
     *
     * @return 权限信息
     */
    AuthPermissionInfoRespVO getUserPermission();


    /**
     * 根据角色Id获取菜单Id列表
     *
     * @param roleId 角色Id
     * @return 菜单Id列表
     */
    List<Long> listMenuIdsByRoleId(Long roleId);

    /**
     * 根据用户Id获取角色Id列表
     *
     * @param userId 用户Id
     * @return 掘金Id列表
     */
    List<Long> listRoleIdsByUserId(Long userId);

    /**
     * 根据用户Id获取角色列表
     *
     * @param userId 用户Id
     * @return 角色列表
     */
    List<RoleDO> listRolesByUserId(Long userId);

}
